const http = require("../../../utils/https");
const app = getApp();

Page({
  data: {
    amount: 0, // 金额，可从支付页面传递过来
    orderType: '', // 订单类型
    successTitle: '支付成功', // 成功标题
    successDesc: '您的停车费已支付成功' // 成功描述
  },

  onLoad(options) {
    // 从支付页面传递金额
    if (options.amount) {
      this.setData({
        amount: parseFloat(options.amount)
      });
    }
    
    // 从支付页面传递订单类型
    if (options.orderType) {
      this.setData({
        orderType: options.orderType
      });
      
      // 根据订单类型设置不同的成功信息
      if (options.orderType === 'monthlyCard') {
        this.setData({
          successTitle: '月卡购买成功',
          successDesc: '您的月卡已支付成功，请查看月卡详情'
        });
      } else if (options.orderType === 'recharge') {
        this.setData({
          successTitle: '充值成功',
          successDesc: `您的账户已成功充值${options.amount}元`
        });
        // 充值成功后调用余额增加接口
        this.increaseBalance(options.amount);
      } else {
        this.setData({
          successTitle: '支付成功',
          successDesc: '您的停车费已支付成功'
        });
      }
    }
  },

  // 调用余额增加接口
  increaseBalance(amount) {
    const token = wx.getStorageSync('token');
    if (!token) {
      console.error('未找到登录token');
      wx.showToast({
        title: '登录状态异常',
        icon: 'none'
      });
      return;
    }

    // 获取用户ID（优先使用residentId，兼容userId）
    const residentId = app.globalData.residentId || wx.getStorageSync('residentId');
    const userId = app.globalData.userId || wx.getStorageSync('userId');
    
    if (!residentId && !userId) {
      console.error('未找到用户ID');
      wx.showToast({
        title: '用户信息异常',
        icon: 'none'
      });
      return;
    }

    // 验证金额参数
    if (!amount || amount <= 0) {
      console.error('金额参数无效:', amount);
      wx.showToast({
        title: '金额参数错误',
        icon: 'none'
      });
      return;
    }

    wx.showLoading({ title: '更新余额中...' });

    // 格式化日期为后端期望的格式 yyyy-MM-dd HH:mm:ss
    const formatDate = (date) => {
      const year = date.getFullYear();
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const day = String(date.getDate()).padStart(2, '0');
      const hours = String(date.getHours()).padStart(2, '0');
      const minutes = String(date.getMinutes()).padStart(2, '0');
      const seconds = String(date.getSeconds()).padStart(2, '0');
      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
    };

    const now = new Date();
    
    // 构建请求参数，使用正确的字段名称
    const requestData = {
      residentId: (residentId || userId).toString(),
      balance: parseFloat(amount).toFixed(2)
    };

    // 如果后端需要更多字段，可以逐步添加
    // const requestData = {
    //   residentId: (residentId || userId).toString(),
    //   balance: parseFloat(amount).toFixed(2),
    //   type: 'recharge',
    //   description: '账户充值',
    //   createTime: formatDate(now),
    //   updateTime: formatDate(now)
    // };

    console.log('发送余额增加请求:', requestData);
    console.log('Token:', token);
    console.log('请求URL:', 'balance/balance');
    console.log('用户ID类型:', residentId ? 'residentId' : 'userId');
    console.log('用户ID值:', residentId || userId);

    // 尝试使用原生wx.request作为备用方案
    const fallbackRequest = () => {
      wx.request({
        url: `${app.globalData.baseUrl}/balance/balance`,
        method: 'PUT',
        data: requestData,
        header: {
          'Authorization': `Bearer ${token}`,
          'Content-Type': 'application/json'
        },
        success: (res) => {
          wx.hideLoading();
          if (res.data.code === 200) {
            console.log('余额增加成功(备用方案):', res.data);
            wx.showToast({
              title: '余额已更新',
              icon: 'success'
            });
          } else {
            console.error('余额增加失败(备用方案):', res.data);
            wx.showToast({
              title: res.data.msg || '余额更新失败',
              icon: 'none',
              duration: 3000
            });
          }
        },
        fail: (err) => {
          wx.hideLoading();
          console.error('备用请求失败:', err);
          wx.showToast({
            title: '网络请求失败',
            icon: 'none',
            duration: 3000
          });
        }
      });
    };

    // 使用封装的http工具
    http.put('balance/balance', requestData, {
      header: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
      }
    }).then(res => {
      wx.hideLoading();
      console.log('余额增加成功:', res);
      wx.showToast({
        title: '余额已更新',
        icon: 'success'
      });
    }).catch(err => {
      wx.hideLoading();
      console.error('余额增加失败:', err);
      
      // 如果封装请求失败，尝试备用方案
      if (err.code === 500 || err.code === 400) {
        console.log('尝试备用请求方案...');
        fallbackRequest();
        return;
      }
      
      // 根据错误类型显示不同的提示
      let errorMsg = '余额更新失败';
      if (err.code === 500) {
        errorMsg = '服务器内部错误，请联系客服';
      } else if (err.code === 400) {
        errorMsg = '请求参数错误';
      } else if (err.code === 401) {
        errorMsg = '登录已过期，请重新登录';
      }
      
      wx.showToast({
        title: errorMsg,
        icon: 'none',
        duration: 3000
      });
    });
  },

  // 完成按钮点击事件
  onComplete() {
    if (this.data.orderType === 'monthlyCard') {
      // 月卡购买成功，返回我的页面
      wx.navigateBack({
        delta: 2 // 返回两层，跳过支付页面
      });
    } else if (this.data.orderType === 'recharge') {
      // 充值成功，返回充值页面
      wx.navigateBack({
        delta: 2 // 返回两层，跳过支付页面
      });
    } else {
      // 停车缴费成功，返回停车页面
      wx.navigateBack({
        url: '/service/pages/parking/parking',
      });
    }
  }
})